﻿namespace Blaze.Editor.EditorExtensions
{
    using UnityEngine;

    /// <summary>
    /// 用于控制在Project窗口上显示的组件。
    /// </summary>
    public class ProjectComponent : ExtensionComponent
    {
        /// <summary>
        /// 绘制组件对象。
        /// </summary>
        /// <param name="guid"></param>
        /// <param name="selectionRect"></param>
        public void Draw(string guid, Rect selectionRect)
        {
            OnDraw(guid, selectionRect);
        }

        /// <summary>
        /// 布局组件对象。
        /// </summary>
        /// <param name="guid"></param>
        /// <param name="rect"></param>
        /// <returns>布局是否成功</returns>
        public bool Layout(string guid, ref Rect rect)
        {
            return OnLayout(guid, ref rect);
        }

        /// <summary>
        /// 验证组件是否有必要显示。
        /// </summary>
        /// <param name="guid">游戏对象</param>
        public bool Validate(string guid)
        {
            return OnValidate(guid);
        }

        /// <summary>
        /// 获取组件是否启用的键。
        /// </summary>
        protected override string GetEnabledKey()
        {
            return string.Format("ProjectComponent_{0}_Enabled", GetType().Name);
        }

        /// <summary>
        /// 当需要绘制组件时调用此方法。
        /// </summary>
        protected virtual void OnDraw(string guid, Rect selectionRect)
        {
        }

        /// <summary>
        /// 当组件需要布局的时调用此方法。
        /// </summary>
        /// <param name="guid"></param>
        /// <param name="rect">剩余可用的空间</param>
        protected virtual bool OnLayout(string guid, ref Rect rect)
        {
            return true;
        }

        /// <summary>
        /// 当需要验证组件是否显示时调用此方法。
        /// </summary>
        /// <param name="guid"></param>
        /// <returns></returns>
        protected virtual bool OnValidate(string guid)
        {
            return true;
        }
    }
}